/* 
1 页面加载的时候
  1 从缓存中获取购物车数据 渲染到页面中
    这些数据  checked=true 
2 微信支付
  1 哪些人 哪些帐号 可以实现微信支付
    1 企业帐号 
    2 企业帐号的小程序后台中 必须 给开发者 添加上白名单 
      1 一个 appid 可以同时绑定多个开发者
      2 这些开发者就可以公用这个appid 和 它的开发权限  
3 支付按钮
  1 先判断缓存中有没有token
  2 没有 跳转到授权页面 进行获取token 
  3 有token 。。。
  4 创建订单 获取订单编号
  5 已经完成了微信支付
  6 手动删除缓存中 已经被选中了的商品 
  7 删除后的购物车数据 填充回缓存
  8 再跳转页面 
 */
import { showModal,showToast,requestPayment } from "../../utils/show.js"
import { request} from "../../request/index.js"

Page({
  data:{
    address:{},
    cart:[],
    totalPrice:0,
    totalNum:0,
    modalHidden: true
  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {
      // 获取缓存中的收货地址信息
      const address = wx.getStorageSync('address');
      //获取缓存中的购物车数组
      let cart = wx.getStorageSync('cart') || [];//数据为空时，也是空数组，而不是null
      //过滤后的购物车数组
      cart = cart.filter(v=>v.checked);
      this.setData({address});

      //设置购物车状态 同时 重新计算 底部工具栏的数据 总价格 购买的商品数量
      //总价格 总数量
      let totalPrice = 0;
      let totalNum = 0;
      cart.forEach(v=>{
          totalPrice += v.num * v.goods_price;
          totalNum += v.num;
      })
        // 5 6 把购物车数据 重新设置回data
        this.setData({
          cart,
          totalPrice,
          totalNum,
          address
        });

    },
 
  //支付
   /**
   * 显示弹窗
   */
  handlePay: function() {
    this.setData({
      modalHidden: false
    })
  },
  /**
   * 点击取消
   */
 async modalCandel() {
    // do something
    await showToast({title:"支付失败",icon:"error"});
    this.setData({
      modalHidden: true
    })
  },
  /**
   *  点击确认
   */
  async modalConfirm() {
      //1 判断缓存中有没有token
      const token = wx.getStorageSync('token');
      //2 判断
      if(!token){
        wx.navigateTo({
          url: '/pages/auth/index'
        });  
        return;
      };

      // 3 创建订单
      // 3.1 准备 请求头参数
       const header = { Authorization: token };
      // 3.2 准备 请求体参数
      const order_price = this.data.totalPrice;
      const consignee_addr = this.data.address.all;
      const cart = this.data.cart;
      let goods = [];
      cart.forEach(v => goods.push({
        goods_id: v.goods_id,
        goods_number: v.num,
        goods_price: v.goods_price
      }))
      const orderParams = { order_price, consignee_addr, goods };
      // 4 准备发送请求 创建订单 获取订单编号
      const { order_number } = await request({ url: "/my/orders/create", method: "POST", data: orderParams ,header});
      // 5 发起预支付的接口
      const {pay} = await request({url:"/my/orders/req_unifiedorder", method: "POST", data: { order_number } ,header});
      //6 发起微信支付 注：没有权限所以无法使用
     // const res = await wx.requestPayment(pay);
      //7 查询后台 订单状态
      await request({url:"/my/orders/chkOrder", method: "POST", data: { order_number } ,header});
      //8 手动删除缓存中 已经支付的商品信息
       let newCart = wx.getStorageSync('cart');
       newCart = newCart.filter(v=>!v.checked);//留下未选中的
       wx.setStorageSync('cart', newCart);
      //9 支付成功 跳转到订单页面
      wx.navigateTo({
        url: '/pages/order/index',
      })
      
      this.setData({
        modalHidden: true
      })
  }
})